package negocio

class InscricaoController  extends BaseSecureController{

    def inscricaoService
    def facebookGraphService
    def index = { redirect(action:'list')}

    def list={
        
    }

    def participarEvento={
        //pega o usuario
        Usuario user=this.&getUserLogged()
        Evento evento= Evento.get(params.id)
        if(!this.&verificarInscricaoEventoUsuario(evento.getId(),user.getId())){
            //cria uma inscricao
            EventoTemInscrito inscricao= new EventoTemInscrito(evento,user)
            inscricao.setData(new Date())

            //vai realizar a inscricao
            if(inscricao.save()){
                if(facebookGraphService && session.facebook){
                    def msg="Acabei de realizar minha inscrição no evento ${evento.toString()}"
                    facebookGraphService.publishWall(msg)
                }
                flash.message ="Você está participando do evento ${evento.toString()}"//"${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
                redirect(action:'list',controller:'evento')
            }
            else{
                flash.message ="Estamos com problemas...${user.toString()} tenta outra vez"//"${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
                redirect(action:'show',controller:'evento',params:params)
            }
        }
        else{
            flash.message = "Você já está participando do evento ${evento.toString()}. Participe de outro!"//"${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
            redirect(action:'list',controller:'evento')
        }
    }

    def participarAtividade={
        //params.each{println(it)}
        //pega o usuario
        Usuario user=this.&getUserLogged()
        Atividade atividade= Atividade.get(params.id)
        if(atividade.getVagas()>0){
            //há vagas
            if(!this.&verificarInscricaoAtividadeUsuario(atividade.getId(),user.getId())){
                //cria uma inscricao
                AtividadeTemIscrito inscricao= new AtividadeTemIscrito(atividade,user,new Date())

                //vai realizar a inscricao
                if(inscricao.save(validate:false)){
                    flash.message ="Você está participando da atividade ${atividade.toString()}"//"${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
                    if(facebookGraphService && session.facebook){
                        def msg="Acabei de realizar minha inscrição na atividade ${atividade.toString()} no evento ${atividade.evento.toString()}"
                        facebookGraphService.publishWall(msg)
                    }
                    redirect(action:'list',controller:'atividade')
                }
                else{
                    flash.message ="Estamos com problemas...Tente outra vez mais tarde!"//"${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
                    redirect(action:'show',controller:'atividade',params:params)
                }
            }
            else{
                flash.message = "Você já está participando da atividade ${atividade.toString()} .Participe de outra!"//"${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
                redirect(action:'list',controller:'atividade')
            }
        }
        //não há vagas
        else{
            flash.message="A atividade ${atividade.toString()} não tem mais vagas!"
           redirect(action:'list',controller:'atividade')
        }

    }
    def verificarInscricaoEventoUsuario(int eventoId, int usuarioId){
       EventoTemInscritoPK inscricaoPK= new EventoTemInscritoPK(eventoId, usuarioId)
       EventoTemInscrito inscricao= EventoTemInscrito.findByEventoTemInscritoPK(inscricaoPK)
       return inscricao
    }

    def verificarInscricaoAtividadeUsuario(int atividade,int usuarioId){
        //cria a chave primaria
        AtividadeTemIscritoPK inscricaoPK= new AtividadeTemIscritoPK(atividade,usuarioId)
        //verifica se o usuario ja esta cadastrado na atividade
        AtividadeTemIscrito inscricao=AtividadeTemIscrito.findByAtividadeTemIscritoPK(inscricaoPK)
        return inscricao
    }

}
